package class_1;

public class Coding_recursion {
	public static int getMaxValue1(int[] arr) {
		int n = arr.length;
		//max，初始默认为系统最小值。
		int max = Integer.MIN_VALUE;
		//无序数组， 直接遍历
		for(int i=0;i<n;i++) {
			max = Math.max(max, arr[i]);
		}
		return max;
	}
	public static int getMaxValue(int[] arr) {
		if(arr==null||arr.length==0) {
			return Integer.MIN_VALUE;//处理值为null，传参为空数组的情况。
		}
		return process(arr, 0, arr.length-1);
	}
	
	public static int process(int[] arr, int l, int r) {
		if(l>r) {
			return Integer.MIN_VALUE;
		}
		if(l==r) {
			return arr[l];//直接返回值
		}
		//递归条件， 降低规模
		
		//分治的过程
		int mid = (l+r)/2;
		int lmax = process(arr, l, mid);
		int rmax = process(arr, mid+1, r);
		
		//合并的过程。
		return Math.max(lmax, rmax);
	}
	
	public static void main(String[] args) {
		int[] arr = {3,5,1,7,8,9,11,2};
		//对比两种方法， 观察结果是否一致。 相互验证！
		System.out.println("最大值:"+getMaxValue1(arr));
		System.out.println("最大值:"+ getMaxValue(arr));
	}
}
